package com.yeren.weixin.gzh.weixin.message.makeCustomMessage;

import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import com.yeren.weixin.gzh.weixin.message.resp.Article;
import com.yeren.weixin.gzh.weixin.message.resp.Music;
import com.yeren.weixin.gzh.weixin.operation.CommonExecute;

/**
 * liubiao
 */
public class MakeCustomMessage {
	/**
	 * 组装文本客服消息
	 * @param openId 消息发送对象
	 * @param content 文本消息内容
	 * @return String
	 */
	public static String makeTextCustomMessage(String openId, String content) {
		// 对消息内容中的引号进行转义
		content = content.replace("\"", "\\\"");
		String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"text\",\"text\":{\"content\":\"%s\"}}";
		return String.format(jsonMsg, openId, content);
	}

	/**
	 * 组装图片客服消息
	 * @param openId 消息发送对象
	 * @param mediaId 媒体文件ID
	 * @return makeImageCustomMessage
	 */
	public static String makeImageCustomMessage(String openId, String mediaId) {
		// 对消息内容中的引号进行转义
		String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"%s\"}}";
		return String.format(jsonMsg, openId, mediaId);
	}

	/**
	 * 组装语音客服消息
	 * 
	 * @param openId 消息发送对象
	 * @param mediaId 媒体文件ID
	 * @return String
	 */
	public static String makeVoiceCustomMessage(String openId, String mediaId) {
		// 对消息内容中的引号进行转义
		String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"%s\"}}";
		return String.format(jsonMsg, openId, mediaId);
	}

	/**
	 * 组装视频客服消息
	 * 
	 * @param openId 消息发送对象
	 * @param mediaId 媒体文件ID
	 * @return String
	 */
	public static String makeVideoCustomMessage(String openId, String mediaId,
			String thumbMediaId) {
		// 对消息内容中的引号进行转义
		String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"vedio\",\"vedio\":{\"media_id\":\"%s\"}}";
		return String.format(jsonMsg, openId, mediaId, thumbMediaId);
	}

	/**
	 * 组装音乐客服消息
	 * 
	 * @param openId 消息发送对象
	 * @param music 音乐对象
	 * @return String
	 */
	public static String makeMusicCustomMessage(String openId, Music music) {
		// 对消息内容中的引号进行转义
		String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"music\",\"music\":{\"media_id\":\"%s\"}}";
		jsonMsg = String.format(jsonMsg, openId, JSONObject.fromObject(music)
				.toString());
		// 参数名称替换
		jsonMsg = jsonMsg.replace("musicUrl", "musicurl");
		jsonMsg = jsonMsg.replace("HQMusic", "hqmusic");
		jsonMsg = jsonMsg.replace("thumbMediaId", "thumb_media_id");
		return jsonMsg;

	}

	/**
	 * 组装图文客服消息
	 * 
	 * @param openId 消息发送对象
	 * @param articleList 图文消息列表
	 * @return String
	 */
	public static String makeNewsCustomMessage(String openId,
			List<Article> articleList) {
		String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"news\",\"news\":{\"articles\":\"%s\"}}";
		jsonMsg = String.format(
				jsonMsg,
				openId,
				JSONArray.fromObject(articleList).toString()
						.replaceAll("\"", "\\\""));
		// 将jsonMsg中的picUrl替换为picurl
		jsonMsg = jsonMsg.replace("picUrl", "picurl");
		return jsonMsg;
	}
	
	/**
	 * 发送客服消息
	 * 
	 * @param accessToken
	 * @param jsonMsg
	 * @return true | false
	 */
	public static boolean sendCustomMessage(String accessToken, String jsonMsg) {
//		log.info("消息内容：{ }", jsonMsg);
		boolean result = false;
		// 拼接请求地址
		String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN";
		requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken);
		// 发送客服消息
		JSONObject jsonObject = CommonExecute.httpsRequest(requestUrl, "POST",jsonMsg);

		if (null != jsonObject) {
			int errorCode = jsonObject.getInt("errcode");
			String errorMsg = jsonObject.getString("errmsg");
			if (0 == errorCode) {
				result = true;
//				log.info("客服消息发送成功errcode:{ } errmsg:{ }", errorCode, errorMsg);
			} else {
//				log.info("客服消息发送失败errcode:{ } errmsg:{ }", errorCode, errorMsg);
			}

		}
		return result;
	}
}
